A character's motility is proscribed according to the geometry represented by the character's skeleton, which comprises a set of nodes and their interrelationships referred to as `segments`). A skeleton, whether it be associated with character motion or motion capture, can be thought of in one respect as a hierarchy, with a single root node to which the remaining nodes are related. A character is designed around a motion hierarchy which is developed in such a way as to best represent the character's structure and range of motion. In the same way, a hierarchy of inter-related nodes is implied in motion capture data (and generally correlates to the placement of the sensors). In one embodiment of the present invention, each individual segment of the respective hierarchies exists in a local coordinate system which is oriented to that segment and its associated node.
To represent the character as a single entity the position and alignment of each segment of the character's motion hierarchy (and the motion capture hierarchy) must be oriented to a single global coordinate system. This can be accomplished in several ways. One is to align each node's local coordinate system directly with the global coordinate system. This method, however, masks the interrelationship of the segments. A second method is to orient a single central segment, the root of the hierarchy, to the global coordinate system and then correlate the remaining segments in parent-child pairs by associating each segment (child) with the adjoining segment on the rootward end (parent). Segments are associated by aligning the local coordinate system of the child segment with the local coordinate system of the respective parent segment.
One method of using motion capture data to give motion to a character consists of transforming the motion capture hierarchy to align with the character's motion hierarchy, thereby transforming the motion data to apply to the character. A transformation is a mathematical description of this alignment of coordinate systems. Each node of the character motion hierarchy tree represents a transformation from the local coordinate system of one segment to the local coordinate system of the adjacent segment. A transformation is defined in terms of adjustments to rotation, translation, and scaling characteristics. Each transformation occurs in its own reference frame or context. A transformation is "local" when its reference frame is relative to the transformation of its parent node. A "global" transformation is one where its reference frame is relative to the world coordinate system. When the second method of node alignment described above is used, inner nodes of the character motion hierarchy are thus local transformations when considered individually. The root of the hierarchy is always global because it has no parent. The root node anchors the character in terms of the world coordinate system. A global position can be determined for any given node by concatenating the local transformation of that node with the local transformation of its parent, then concatenating the result with the local transformation of its parent's parent, and so on, until the root node is reached and its transformation (which is always global by definition) is concatenated.
Motion data by definition includes an inherent structure or skeleton. In order to emulate motion in a simple one-object system, the object's skeleton is defined in terms of the interrelationships of a collection of nodes. FIG. 1 shows a simple object skeleton consisting of nodes 101-110. For each point in time, each node has an (x,y,z) position and associated segment information. In some systems the (x,y,z) positions are absolute positions in a universal coordinate system 150. In other systems the skeleton is set up as a tree-like structure, with a single root node (101 in the example shown) positioned in a universal coordinate system. The locations of the remaining nodes 102-110 are offsets measured from the node next closer to the root node on that particular branch of the tree. This is also described as a parent-child relationship. For example, for one of the legs of the skeleton shown in FIG. 1, in a first-level parent-child association the position of node 102 (the child) is defined in terms of root node 101 (the parent). In a like manner, a second level parent-child relationship exists where the position of node 103 (the child) is defined in terms of node 102 (a parent in this relationship).
A character defined in this manner is made to "move" by changing the relationships between some or all of the nodes for each of a series of time slices. At each point in time (time slice), then, the position (or "translation") of any one node (the child node) may be described in terms of the translation of the node next closest to the root node (the parent node) and the node's rotation and scale relative to the parent. "Translation" identifies the node's position in an (x, y, z) coordinate system. "Rotation" refers to radial motion about a central point. Rotation data identifies the child node's alignment within a stated coordinate system at a particular point in time, the parent node serving as the rotation point. "Scale" refers to the spatial relationship between the two nodes. A change in any one or more of these aspects from one time slice to the next is what brings the perception of motion to the skeleton. Motion data can thus be described numerically as a succession of changes in the translation, rotation and scale of a set of nodes.
Data for giving motion to a character is derived in a number of ways. It may be manufactured by hand, but this is a very tedious process and is generally used for only the most simple of motions. One common method, referred to as motion capture, is to affix sensors at node locations of a movable object (such as a person) and then "capture" the motion by recording the change in sensor positions in fixed increments of time as the motion capture subject emulates the motions which the character is to embody. If the character to which the motion data is to be applied (the `target`) is based on a skeleton (the entire framework of nodes and segments) which is physiologically identical to the motion capture skeleton (the `source`) the motion data can be applied to the character more or less directly by aligning the source skeleton nodes to the corresponding target skeleton nodes with little or no transformation required.
However, where the character is based on a skeleton which only approximates the source skeleton or which has significant variances from the source skeleton, further transformation of the motion data must be performed in order to effectively assign the captured motion data to the character. One method of transforming motion capture data between disparate skeletons is described in U.S. patent application Ser. No. 08/678,670, filed Jul. 11, 1996 the entire contents of which are incorporated herein by reference. According to this method, the root node of the target skeleton is aligned with the root node of the source skeleton. All elemental position changes are then described in terms of the root node. The other nodes of either skeleton branch out from the root in a tree-like fashion. The motion for each node is defined in terms of its relationship ("child") to the next node in the direction of the root ("parent"). This method allows scaling and other techniques to be applied to any child node, thus enabling transfer of motion from one skeleton to another skeleton with different segment dimensions.
While this technique resolves some of the issues surrounding the ability to maintain the proper relationship between adjoining segments, limitations remain in conventional motion data processing techniques. One limitation is that conventional systems are ill-equipped to handle target skeletons which contain one or more segments which differ significantly from those of the source system. One example would be where the leg segments of the source system are essentially equal in length, while in the target system the upper leg length is significantly shorter than the lower leg length. FIG. 2A shows the position of the foot node 105 of the source skeleton as the lower leg moves through a sequence of angles. FIG. 2B shows how a conventional transformation of the motion data to a leg of different proportions would result in the leg segment 205 no longer attaching to the foot node 105.
A process referred to as "inverse kinematics" (IK) is one partial solution that has been developed in an attempt to address the problem of matching the motion and placement of nodes(such as end effectors) with their associated segments when the target skeleton differs physiologically from the source skeleton. IK reconstructs segment motion according to modifying the angular characteristics of a node using mathematical estimation.
There are, however, limitations in this solution. At a basic level, IK allows the user to identify a best fit for a segment at each time slice. Conventional IK, however, starts with the segment position and then recalculates the associated angles according to established mathematical models. Since there are an infinite number of solutions possible for any give point in time, it becomes a trial-and-error process to find the appropriate value for each time slice. In addition, the angles for each succeeding point in time are independently derived. As a result discontinuities are introduced into the motion representation. What is needed is a way to transfer motion data between dissimilar structures without introducing inconsistencies into the resulting motion of the target structure. In addition, there is a need to apply adjustments to the motion capture data in such a way as to make the resulting data available to a wide range of motion-oriented applications, as conventional animation systems tends to perform IK differently and generally incompatibly.